package rpc

import (
	"go-monitor/server/g"
	"net"
	"net/rpc"
	"net/rpc/jsonrpc"
)

// StartRPC 启动RPC监听
func StartRPC() {
	if !g.Config().RPC.Enabled {
		return
	}
	addr := g.Config().RPC.Listen
	tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
	if err != nil {
		g.Logger.Error("net.ResolveTCPAddr fail: %s", err)
	}

	listener, err := net.ListenTCP("tcp", tcpAddr)
	if err != nil {
		g.Logger.Error("listen %s fail: %s", addr, err)
	} else {
		g.Logger.Info("rpc listening", addr)
	}
	defer listener.Close()

	server := rpc.NewServer()
	server.Register(new(Server))

	for {
		conn, err := listener.Accept()
		if err != nil {
			g.Logger.Error("listener.Accept occur error:", err)
			continue
		}
		go server.ServeCodec(jsonrpc.NewServerCodec(conn))
	}
}
